Флаги не меняются.
Команда:
LODS source-str
Логика:
Accumulator = (DS:SI) if DF = 0 SI = SI + n ; n = 1 для байта, 2 - для слова else SI = SI - n
Команда LODS передает байт или слово, расположенное по адресу DS:SI в AX или AL, а также инкрементирует или декрементирует SI (в зависимости от состояния флага направления DF), чтобы указатель переместился на следующий элемент.
Операнды | Такт байты (слова) | Обращения | Байты | Пример |
source-str | 12(16) | - | 1 | LODS LIST |
(повтор) source-str | 9+13(17) | /rep 1/rep | 1 | REP LODS LIST |
Примечания:
Эта команда всегда ассемблируется или как LODSB, загрузка строки из байтов, или как LODSW, загрузка строки из слов, в зависимости от того, указывает ли source-str на строку байтов или на строку слов. Однако, в обоих случаях Вы должны в явном виде загрузить в регистр SI смещение строки.
Хотя и разрешется использовать эту команду в повторном режиме, это почти никогда не делается, т.к. это привело бы к постоянному изменению значения в AL.
Следующий пример иллюстрирует пересылку восьми байтов иэ INIT_PORT в порт 250. (Не пробуйте делать этого на вашей машине, если Вы не знаете о назначении порта 250.)
INIT_PORT: DB '$CMD0000' ;Строка, которую мы хотим переслать CLD ;Будем передвигаться в прямом ;направлении LEA SI,INIT_PORT ;Засылаем в SI стартовый адрес ;строки MOV CX,8 ;CX является счетчиком ;для команды LOOP AGAIN: LODS INIT_PORT ;В имени INIT_PORT ассемблер OUT 250,AL ;нуждается только для того, чтобы ; определить, имеет ли он дело LOOP AGAIN ; с байтами или со словами